﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Eniux.Windows.Dock
{
    /// <summary>
    /// Dock笔刷枚举
    /// </summary>
    public enum AvalonDockBrushes
    {
        DefaultBackgroundBrush,

        DockablePaneTitleBackground,
        DockablePaneTitleBackgroundSelected,
        DockablePaneTitleForeground,
        DockablePaneTitleForegroundSelected,

        PaneHeaderCommandBackground,
        PaneHeaderCommandBorderBrush,

        DocumentHeaderBackground,
        DocumentHeaderForeground,
        DocumentHeaderForegroundSelected,
        DocumentHeaderForegroundSelectedActivated,
        DocumentHeaderBackgroundSelected,
        DocumentHeaderBackgroundSelectedActivated,
        DocumentHeaderBackgroundMouseOver,
        DocumentHeaderBorderBrushMouseOver,
        DocumentHeaderBorder,
        DocumentHeaderBorderSelected,
        DocumentHeaderBorderSelectedActivated,

        NavigatorWindowTopBackground,
        NavigatorWindowTitleForeground,
        NavigatorWindowDocumentTypeForeground,
        NavigatorWindowInfoTipForeground,
        NavigatorWindowForeground,
        NavigatorWindowBackground,
        NavigatorWindowSelectionBackground,
        NavigatorWindowSelectionBorderbrush,
        NavigatorWindowBottomBackground,
    }

    /// <summary>
    /// 拥有上下文菜单的元素枚举
    /// </summary>
    public enum ContextMenuElement
    {
        DockablePane,
        DocumentPane,
        DockableFloatingWindow,
        DocumentFloatingWindow
    }

    /// <summary>
    /// DockableContent状态枚举
    /// </summary>
    public enum DockableContentState
    {
        /// <summary>
        /// Content is not associated with any <see cref="DockingManager"/> (Default State)
        /// </summary>
        None,

        /// <summary>
        /// 停靠
        /// </summary>
        Docked,

        /// <summary>
        /// 自动隐藏
        /// </summary>
        AutoHide,

        DockableWindow,

        FloatingWindow,

        Document,

        /// <summary>
        /// 隐藏
        /// </summary>
        Hidden,
    }


    /// <summary>
    /// Defines how a dockable content can be dragged over a docking manager
    /// </summary>
    /// <remarks>This style can be composed with the 'or' operator.</remarks>
    public enum DockableStyle : uint
    {
        /// <summary>
        /// Content is not dockable at all
        /// </summary>
        None = 0x0000,

        /// <summary>
        /// Dockable as document
        /// </summary>
        Document = 0x0001,

        /// <summary>
        /// Dockable to the left border of <see cref="DockingManager"/>
        /// </summary>
        LeftBorder = 0x0002,

        /// <summary>
        /// Dockable to the right border of <see cref="DockingManager"/>
        /// </summary>
        RightBorder = 0x0004,

        /// <summary>
        /// Dockable to the top border of <see cref="DockingManager"/>
        /// </summary>
        TopBorder = 0x0008,

        /// <summary>
        /// Dockable to the bottom border of <see cref="DockingManager"/>
        /// </summary>
        BottomBorder = 0x0010,

        /// <summary>
        /// A <see cref="DockableContent"/> with this style can be hosted in a <see cref="FloatingWindow"/>
        /// </summary>
        Floating = 0x0020,

        /// <summary>
        /// A <see cref="DockableContent"/> with this style can be the only one content in a <see cref="DockablePane"/> pane (NOT YET SUPPORTED)
        /// </summary>
        /// <remarks>This style is not compatible with <see cref="DockableStyle.Document"/> style</remarks>
        Single = 0x0040,

        /// <summary>
        /// A <see cref="DockableContet"/> with this style can be autohidden.
        /// </summary>
        AutoHide = 0x0080,

        /// <summary>
        /// Dockable only to a border of a <see cref="DockingManager"/>
        /// </summary>
        DockableToBorders = LeftBorder | RightBorder | TopBorder | BottomBorder | AutoHide,

        /// <summary>
        /// Dockable to a border of a <see cref="DockingManager"/> and into a <see cref="DocumentPane"/>
        /// </summary>
        Dockable = DockableToBorders | Document | Floating,

        /// <summary>
        /// Dockable to a border of a <see cref="DockingManager"/> and into a <see cref="DocumentPane"/> but not in autohidden mode (WinForms controls)
        /// </summary>
        DockableButNotAutoHidden = Dockable & ~AutoHide
    }

    /// <summary>
    /// Anchor types
    /// </summary>
    public enum AnchorStyle
    {
        /// <summary>
        /// No anchor style, while content is hosted in a <see cref="DocumentPane"/> or a <see cref="FloatingWindow"/>
        /// </summary>
        None,
        /// <summary>
        /// Top border anchor
        /// </summary>
        Top,
        /// <summary>
        /// Left border anchor
        /// </summary>
        Left,
        /// <summary>
        /// Bottom border anchor
        /// </summary>
        Bottom,
        /// <summary>
        /// Right border anchor
        /// </summary>
        Right
    }

    public enum OverlayButtonHover
    {
        None,
        DropPaneInto,
        DropPaneLeft,
        DropPaneRight,
        DropPaneTop,
        DropPaneBottom,
        DropBorderLeft,
        DropBorderRight,
        DropBorderTop,
        DropBorderBottom,
        DropMainPaneLeft,
        DropMainPaneRight,
        DropMainPaneTop,
        DropMainPaneBottom,
    }
}
